//
//  LYRouterInstance.h
//  Router
//
//  Created by cqck on 2021/11/1.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

///支持的路由文件类型
typedef NS_ENUM(NSUInteger, LYRouteFileType) {
    ///JSON格式
    LYRouteFileTypeJSON,
    ///XML格式
    LYRouteFileTypeXML,
};

@interface LYRouterInstance : NSObject

/**
 @brief 路由单例

 @return LYRouter
 */
+ (instancetype)sharedLYRouterInstance;

/**
 @brief 是否显示调试日志(Release下需要关闭)

 @param enable 是否打开日志
 */
+ (void)enableLog:(BOOL)enable;

/**
 *@brief             读取配置路由文件
 *
 *@param fileName         路由配置文件名
 *@param fileType         路由配置文件后缀名
 */
- (void)configRouterWithFileName:(NSString *)fileName fileType:(LYRouteFileType)fileType;

/**
 *@brief                     根据URL地址获取对应Controller
 *
 *@param url                                     URL地址
 *@return UIViewController              原生页面
 */
- (UIViewController *)controllerWithUrl:(NSString *)url;

/**
 *@brief                根据URL地址获取对应Controller
 *
 *@param url                           URL地址
 *@param extraParam           额外的无法通过URL地址传入的参数
 *@return UIViewController    原生页面
 */
- (UIViewController *)controllerWithUrl:(NSString *)url extraParam:(NSDictionary *)extraParam;

/**
 *@brief 根据URL push controller
 *
 *@param url URL地址
 */
- (void)pushPageWithUrl:(NSString *)url;

/**
 *@brief 根据URL push controller
 *
 *@param url URL地址
 *@param extraParam 对象类参数
 */
- (void)pushPageWithUrl:(NSString *)url extraParam:(NSDictionary *)extraParam;

/**
 *@brief 根据URL present controller
 *
 *@param url URL地址
 */
- (void)presentPageWithUrl:(NSString *)url navigationCtrl:(UINavigationController *)navCtrl complation:(void(^)(void))complation;

/**
 *@brief 根据URL present controller
 *
 *@param url URL地址
 *@param extraParam 对象类参数
 */
- (void)presentPageWithUrl:(NSString *)url extraParam:(NSDictionary *)extraParam navigationCtrl:(UINavigationController *)navCtrl complation:(void(^)(void))complation;

/**
 *@brief 返回指定索引视图(如果索引不存在则直接退回根视图)
 *
 *@param idx 页面索引
 */
- (void)popToViewControllerWithIdx:(NSInteger)idx;

/**
 *@brief 返回根视图视图
 */
- (void)popToRootController;

/**
 *@brief 返回上一个视图
 */
- (void)popPrviewViewController;

/**
 *@brief 返回指定索引视图(如果索引不存在则直接退回前一个视图)
 *
 *@param idx 页面索引
 */
- (void)popToViewControllerFailToPrviewViewControllerWithIdx:(NSInteger)idx;

/**
 *@brief 退出模态视图
 */
- (void)dismissViewController:(void(^)(void))complation;

/**
 *@brief 设置路由未找到错误页面
 *
 *@param viewController 错误页面
 */
- (void)setUrlNotFoundController:(UIViewController *)viewController;

@end
